Visualizzazione dei database e relative tabelle su un server.
Abbiamo visto come funziona la connessione a MySQL tramite il PHP, adesso vedremo alcune delle funzioni predefinite per la gestione di un database MySQL. Queste funzioni sono:
- mysql_list_dbs() che elenca la lista dei database presenti nel server;
- mysql_num_rows() che restituisce
il numero di righe presenti nell'insieme restituito da un operazione. In pratica
al momento che si esegue
un operazione del tipo "dammi l'elenco delle tabelle presenti in un database"
esso restituisce il numero delle tabelle.
- mysql_tablename() che
diversamente da quello che si può intuire essa può ricavare il nome di un
database o di una tabella a partire dal
risultato di un operazione.
Lo scopo iniziale del nostro script sarà quello di visualizzare l'elenco dei database presenti nel nostro server (localhost). Tramite il nostro amato Blocco Note scriviamo il seguente script PHP:
<?
$connessione = mysql_connect("localhost", "nick", "password")
or die("Impossibile stabilire una connessione");
$databases = mysql_list_dbs($connessione)
or die("Impossibile ottenere una lista dei database");
$elenco = "<ul>";
$i = 0;
while ($i < mysql_num_rows($databases))
{
$nomi[$i] =
mysql_tablename($databases, $i);
$elenco .= "<li>$nomi[$i]";
$i++;
}
$elenco .= "</ul>";
?>
<html><head><title>Elenco database e tabelle su localhost</title></head>
<body>
<h2><b>Elenco database e relative tabelle su localhost:</b></h2>
<p><? echo "$elenco"; ?>
</body>
</html>
Salviamo il file con il nome di
elencodb.php e, come al solito, memorizziamolo nella directory radice e
mandiamo in esecuzione.
Il risultato sarà, come vedremo, un elenco non ordinato dei database presenti
nella directory dell'SQL.
Allo stesso file adesso integriamo la porzione di script PHP per la
visualizzazione delle tabelle dei singoli database presenti, modificando anche
la procedura di visualizzazione del tutto:
<?
$connessione = mysql_connect("localhost", "nick",
"password")
or die("Impossibile stabilire una connessione");
$databases = mysql_list_dbs($connessione)
or die("Impossibile ottenere una lista dei database");
$elenco = "<ul>";
$i = 0;
while ($i < mysql_num_rows($databases))
{
$nomi[$i] =
mysql_tablename($databases, $i);
$elenco .= "<li>$nomi[$i]";
if (($nomi[$i] != "mysql")&&($nomi[$i] != "tempdata"))
{
$tabelle = mysql_list_tables($nomi[$i])
or die("Impossibile ottenere una lista delle tabelle del database");
$elencotab = "<ul>";
$num = 0;
while ($num < mysql_num_rows($tabelle))
{
$nomitab[$num] = mysql_tablename($tabelle, $num);
$elencotab .= "<li>$nomitab[$num]";
$num++;
}
$elencotab .= "</ul>";
}
$elenco
.= "$elencotab";
$i++;
}
$elenco .= "</ul>";
?>
<html><head><title>Elenco database e tabelle su localhost</title></head>
<body>
<h2><b>Elenco database e relative tabelle su localhost:</b></h2>
<p><? echo "$elenco"; ?>
</body>
</html>
In pratica analizzando attentamente il
nostro nuovo listato con il precedente non abbiamo fatto altro che aggiungere un
nuovo comando, mysql_tablename() contenuto nella variabile $nomi,
seguito dal parametro che contiene la lista dei database e dal
corrispondente contatore, all'interno del ciclo per l'elencazione dei
database, in modo da ottenere la lista dei nomi delle tabelle contenute nei
singoli database; quindi verificato che il controllo non cerchi di elencare le
tabelle di sistema "mysql" e "tempdata", in quanto il tentativo di
visualizzazione genererebbe un messaggio d'errore, creiamo il ciclo di
elencazione delle restanti tabelle che verrà memorizzato in una seconda lista
non ordinata e poi aggregata alla prima; quindi, con codice HTML, vengono
visualizzate entrambe.
Salviamo la modifica fatta al file e mandiamo in esecuzione. Appariranno due o
più liste non ordinate, in base a quante ne abbiamo create nuove all'inizio
delle lezioni, nidificate una sull'altra a visualizzare correttamente i database
e le loro tabelle.